package temp.leetcode.editor.cn;

//给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
//
//
// 如果剩余字符少于 k 个，则将剩余字符全部反转。
// 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
//
//
//
//
// 示例 1：
//
//
//输入：s = "abcdefg", k = 2
//输出："bacdfeg"
//
//
// 示例 2：
//
//
//输入：s = "abcd", k = 2
//输出："bacd"
//
//
//
//
// 提示：
//
//
// 1 <= s.length <= 10⁴
// s 仅由小写英文组成
// 1 <= k <= 10⁴
//
//
// Related Topics 双指针 字符串 👍 437 👎 0

/**
 * 反转字符串 II
 *
 * @author saint
 */
class P541_ReverseStringIi{
    public static void main(String[] args) {
        Solution solution = new P541_ReverseStringIi().new Solution();

    }

    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String reverseStr(String s, int k) {
        int len=s.length();
        if(len<=1){
            return s;
        }
        int left=0,right=0;
        StringBuffer res = new StringBuffer();
        while(left+2*k<len){
            right=left+2*k;
            StringBuffer sb = new StringBuffer(s.substring(left, left+k));
            String tmp = s.substring(left+k,right);
            res.append(sb.reverse());
            res.append(tmp);
            left=right;
        }
        //剩余字符少于k个
        if(left+k>len){
            StringBuffer sb = new StringBuffer(s.substring(left));
            res.append(sb.reverse());
        }
        else {
            StringBuffer sb = new StringBuffer(s.substring(left, left+k));
            String tmp = s.substring(left+k);
            res.append(sb.reverse());
            res.append(tmp);
        }
        return res.toString();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
